package ejb.model;

import cve.entidades.CVE;
import cve.parser.CVEParser;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Stateless;

/**
 *
 * @author t41507
 */
@Stateless
public class VulnerabilityEJB implements java.io.Serializable {
    
    private static final long serialVersionUID = -1L;
    private static final Logger LOG = Logger.getLogger(VulnerabilityEJB.class.getName());
    private final CVEParser mCVEParser = new CVEParser();
    private List<CVE> listaRecientes;
    private List<CVE> listaArchivo;
    
    public List<CVE> obtenerVulnerabilidadesRecientes() {
        LOG.log(Level.INFO, "Obteniendo vulnerabilidades Más Recientes");
        mCVEParser.setFiltro("");
        //listaRecientes = mCVEParser.getListCVE(manejarURL("http://nvd.nist.gov/download/nvdcve-recent.xml"));
        listaRecientes = mCVEParser.getListCVE(getClass().getResourceAsStream("/resources/nvdcve-recent.xml"));
        if (listaRecientes.isEmpty()) {
            return new ArrayList<>();
        }
        return listaRecientes;
    }

    private InputStream manejarURL(String mURL) {
        try {
            URL url = new URL(mURL);
            URLConnection urlConnection = url.openConnection();
            HttpURLConnection connection = null;
            if (urlConnection instanceof HttpURLConnection) {
                connection = (HttpURLConnection) urlConnection;
            } else {
                LOG.log(Level.INFO, "URL No Valida");
            }
            return connection.getInputStream();
        } catch (MalformedURLException e) {
        } catch (IOException ex) {
            LOG.log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    /**
     * TODO: descargar el archivo y leerlo directamente como recurso
     * @return 
     */

    public List<CVE> obtenerArchivoVulnerabilidades() {
        LOG.log(Level.INFO, "Obtiendo las vulnerabilidades de 2014");
        mCVEParser.setFiltro("");
        //listaArchivo = mCVEParser.getListCVE(getISFromResource());
        listaArchivo = mCVEParser.getListCVE(getClass().getResourceAsStream("/resources/nvdcve-2014.xml"));
        if (listaArchivo.isEmpty()) {
            return new ArrayList<>();
        }
        return listaArchivo;
    }

    private InputStream getISFromResource() {
        LOG.log(Level.INFO, "Retornando el flujo de: /resources/nvdcve-2014.xml");
        return getClass().getResourceAsStream("//resources//nvdcve-2014.xml");
    }
}